package br.com.locasis.conversores;

import java.text.DecimalFormat;
import java.util.regex.Pattern;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;

@org.jboss.seam.annotations.faces.Converter(id="conversorMonetario")
public class ConversorMonetario implements Converter {

	public Object getAsObject(FacesContext context, UIComponent component, String valorCampo){
		Object valor = null;
		if(valorCampo != null && !valorCampo.equals("")){
			valor = desmacaraValor(valorCampo);
		}
		
		return valor;
	}

	public String getAsString(FacesContext context, UIComponent component, Object objCampo){
		String valor = null;
		if(objCampo != null && !objCampo.toString().equals("")){
			valor = mascaraValor(objCampo.toString());
		}
		return valor;
	}

	public static String mascaraValor(String valor) {
		DecimalFormat df = new DecimalFormat("0.00");  
		valor = df.format(Double.valueOf(valor));  
		String valorRetorno = valor.replace('.', ',');
		int posPontoMilhar = valorRetorno.indexOf(",");
		if(posPontoMilhar == -1){
			valorRetorno += ",00";
		}
		posPontoMilhar = valorRetorno.indexOf(",");
		while (posPontoMilhar > 3) {
			posPontoMilhar -= 3;
			valorRetorno = valorRetorno.substring(0, posPontoMilhar) + "." + valorRetorno.substring(posPontoMilhar, valorRetorno.length()); 
		}
		if (valorRetorno.indexOf(",")==-1){
			valorRetorno += ",00";
		}
		if(valorRetorno.substring(valorRetorno.indexOf(","), valorRetorno.length()).length() == 2){
			valorRetorno += "0";
		}
		return valorRetorno;
	}
	
	public static Float desmacaraValor(String valor) {
		String valorRetorno = valor;
		valorRetorno = valorRetorno.replace(".", "");
		valorRetorno = valorRetorno.replace(",", ".");
		if(!Pattern.matches("(\\d)*+(\\.\\d{1,2}+)"  , valorRetorno) && !Pattern.matches("(\\d)*"  , valorRetorno)){
			throw new ConverterException();
		}
		return new Float(valorRetorno);
	}
}